﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using EntitiesAndMappings.Entities;
using ProyectoActivos.Validate;
using ProyectoActivos.Daos;

namespace ProyectoActivos.Forms.Operaciones
{
    public partial class FrmEditarEntregaEquipos : Form, IValidateForm
    {
        public bool CerroSinAccion { get; set; }

        private DetalleSalida detalleSalida;

        private bool _valido;



        public FrmEditarEntregaEquipos(DetalleSalida detalleSalida)
        {
            InitializeComponent();
            this.detalleSalida = detalleSalida;
            lblArticulo.Text = detalleSalida.Articulo.ToString();
            lblCantidadArticulo.Text = detalleSalida.Cantidad.ToString();
            lblTotalEntregaEquipo.Text = "0";
            this.dGridEntregaEquipo.AutoGenerateColumns = false;
            dGridEntregaEquipo.DataSource = detalleSalida.ItemsEntregaEquipo;
            lblTotalEntregaEquipo.Text = detalleSalida.SumaCantidades().ToString();
        }


        public void Invalid()
        {
            _valido = false;
        }

        public Boolean IsValid()
        {
            return _valido;
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            _valido = true;
            errorProvider.Clear();
            FormsAssert.AssertComboBoxSelected(cmbTrabajador, errorProvider, this);
            FormsAssert.AssertTextBoxOnlyPositiveNumbers(txtCantidad, errorProvider, this);
           
            //Revisamos si el articulo ya está agregado al detalle
            foreach (EntregaEquipo entregaEquipo in detalleSalida.ItemsEntregaEquipo)
            {
                if (entregaEquipo.Trabajador.Id == ((Trabajador)cmbTrabajador.SelectedItem).Id)
                {
                    MessageBox.Show("Ya se agregó una entrega para el trabajador elegido, para modificarlo, elimínelo y vuelva a elegirlo especificando las propiedades deseadas");
                    return;
                }
            }


            ActionExecutor.Execute(this, delegate
            {

                detalleSalida.AgregarItemEntregaEquipo(new EntregaEquipo()
                {
                     Trabajador = (Trabajador)cmbTrabajador.SelectedItem,
                      Cantidad = int.Parse(txtCantidad.Text)
                }
            );

                dGridEntregaEquipo.DataSource = null;
                dGridEntregaEquipo.DataSource = detalleSalida.ItemsEntregaEquipo;
                lblTotalEntregaEquipo.Text = detalleSalida.SumaCantidades().ToString();
            });

        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (dGridEntregaEquipo.CurrentRow != null)
            {
                EntregaEquipo entregaEquipo = (EntregaEquipo)dGridEntregaEquipo.CurrentRow.DataBoundItem;

                detalleSalida.QuitarItemEntregaEquipo(entregaEquipo);

                dGridEntregaEquipo.DataSource = null;
                dGridEntregaEquipo.DataSource = detalleSalida.ItemsEntregaEquipo;
                lblTotalEntregaEquipo.Text = detalleSalida.SumaCantidades().ToString();
            }
            else
            {
                MessageBox.Show(@"Debe seleccionar un elemento");
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void FrmEditarEntregaEquipos_Load(object sender, EventArgs e)
        {
            var trabajadorDAO = new TrabajadorDAO();
            cmbTrabajador.DataSource = trabajadorDAO.ListarTrabajadoresConContratoActivo(); 
            cmbTrabajador.SelectedItem = null;

        }
    }
}
